const config_url = "https://api.bailiban.net";

// 获取token的方法，您可以根据实际情况更改获取方式
function getToken() {
	// 这里可以根据实际情况从本地存储、全局状态等获取token
	return uni.getStorageSync('token') || '';
}
var index = 1; // 添加一个标志以跟踪是否已重定向
const request = (url, data = {}, method = 'GET') => {
	const token = getToken(); // 获取token

	// 深拷贝数据以避免修改原始数据
	const newData = JSON.parse(JSON.stringify(data));

	// 将BigInt类型转换为字符串
	function replacer(key, value) {
		if (typeof value === 'bigint') {
			return value.toString();
		}
		return value;
	}

	const serializedData = JSON.stringify(newData, replacer);
	return new Promise((resolve, reject) => {
		uni.request({
			url: config_url + url,
			data: JSON.parse(serializedData), // 反序列化数据
			method: method,
			// 请求拦截
			header: {
				"Authorization": token
			},
			// 响应拦截
			success: (res) => {
				resolve(res.data);
				// 403
				console.log(index);
				if (res.statusCode === 403) { // 检查是否已经重定向


					const pages = getCurrentPages(); // 获取当前页面栈
					const currentPage = pages[pages.length - 1]; // 获取当前页面对象
					const currentUrl = `/${currentPage.route}`; // 获取当前页面路径
					console.log(currentUrl); // 输出当前页面路径
					index ++; // 设置重定向标志为true
					console.log(index, '10342891034583120');
					if (currentUrl !== '/pages/information/information' && currentUrl !==
						"/pages/login/login"&& index%2!==0) { // 检查当前页面路径
						
						console.log('弹框111111111111');
						uni.showModal({
							// show:false,
							title: '暂时未登录无法查看',
							content: '点击确认登陆',
							confirmColor: '#17ac82', // 确认按钮的文字颜色
							success: function(res) {
								if (res.confirm) {
									this.showModal = false; // 控制模态框显示
									uni.navigateTo({
										url: '/pages/login/login'
									});
								} else if (res.cancel) {
									uni.navigateBack({
										delta: 1
									})
								}
							}
						});
						this.$forceUpdate()
						uni.hideModal(); // 关闭弹出框

					}
				} else {
					resolve(res.data);
				}

			},
			fail: function(err) {
				reject(err)
			}
		})
	});
};

// GET 请求封装
const get = (url, data) => {
	return request(url, data, 'GET');
};

// POST 请求封装
const post = (url, data) => {
	return request(url, data, 'POST');
};

// PUT 请求封装
const put = (url, data) => {
	return request(url, data, 'PUT');
};

// DELETE 请求封装
const del = (url, data) => {
	return request(url, data, 'DELETE');
};

export {
	get,
	post,
	put,
	del
};